package com.loby.data.rest;



import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;

import java.io.Serializable;

@Data
@AllArgsConstructor
@Builder
public class RestResult implements Serializable {

    /**
     * 错误码，对应{@link ErrorCode}，表示一种错误类型 如果是成功，则code为200
     */
    @ApiModelProperty("错误码，对应{@link ErrorCode}，表示一种错误类型 如果是成功，则code为200")
    private int code;

    /**
     * 对错误的具体解释
     */
    @ApiModelProperty("对错误或成功的具体解释")
    private String message;

    /**
     * 返回的结果包装在value中，value可以是单个对象
     */
    @ApiModelProperty("返回的结果包装在value中，value可以是单个对象")
    private final Object value;

    // 忽略getter和setter，以及构造函数
    public RestResult() {
        value = null;
    }

    public static RestResult valueOf(Object body) {
        return RestResult.builder().value(body).code(ErrorCode.SUCCESS.getCode()).message(ErrorCode.SUCCESS.getMsg())
                .build();
    }

    public static RestResult errorOf(ErrorCode jsonParseError, String message) {
        return RestResult.builder().code(jsonParseError.getCode()).message(message).build();
    }


    public static RestResult errorOf(String message) {
        return RestResult.builder().message(message).build();
    }

    public static RestResult success(String message, Object body) {
        return RestResult.builder().value(body).code(ErrorCode.SUCCESS.getCode()).message(message).build();
    }

    public static RestResult success(Object body) {
        return RestResult.builder().value(body).code(ErrorCode.SUCCESS.getCode()).message(ErrorCode.SUCCESS.getMsg())
                .build();
    }

    public static RestResult successMessageOf(String msg) {
        return RestResult.builder().code(ErrorCode.SUCCESS.getCode()).message(msg).build();
    }

    // 忽略getter和setter，以及构造函数

}
